package ui;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import bank.Bank;
public class LoginController {
private static final String DEFAULT_PATH = "C:\\bank.ser";
private AdminPanel adminPanel;
private PersonPanel personPanel;
private Bank bank;
public LoginController() {
loadDataFromDisk();
if (bank == null) {
bank = new Bank();
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setResizable(false);
UserType result = login();
if (result.equals(UserType.ADMIN)) {
adminPanel = new AdminPanel(this, frame);
frame.setVisible(true);
frame.setTitle("Admin");
frame.add(adminPanel, BorderLayout.CENTER);
} else if (result.equals(UserType.CUSTOMER)) {
personPanel = new PersonPanel(this, frame,bank.getPerson());
frame.setVisible(true);
frame.setTitle("Customer");
frame.add(personPanel, BorderLayout.CENTER);
}
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
saveDataToDisk(bank);
}
});
}
private void loadDataFromDisk() {
try {
FileInputStream fileIn = new FileInputStream(DEFAULT_PATH);
ObjectInputStream in = new ObjectInputStream(fileIn);
this.bank = (Bank) in.readObject();
in.close();
fileIn.close();
} catch (IOException e) {
System.out.println("File not found");
return;
} catch (ClassNotFoundException c) {
System.out.println("OrderTree class was not found");
c.printStackTrace();
return;
}
}
protected void saveDataToDisk(Object object) {
try {
FileOutputStream fileOut = new FileOutputStream(DEFAULT_PATH);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(object);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in " + DEFAULT_PATH + "\n");
} catch (IOException i) {
i.printStackTrace();
}
}
private UserType login() {
JLabel usernameLabel = new JLabel("Username");
JTextField user = new JTextField();
JLabel passwordLabel = new JLabel("Password");
JPasswordField pass = new JPasswordField();
Object[] ob = { usernameLabel, user, passwordLabel, pass };
int result = JOptionPane.showConfirmDialog(null, ob, "Login", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
if (user.getText().equals("admin")
&& (Arrays.equals(pass.getPassword(), new char[] { '1', '2', '3', '4', '5' }))) {
return UserType.ADMIN;
} else if (user.getText().equals("person")
&& (Arrays.equals(pass.getPassword(), new char[] { '1', '2', '3' }))) {
return UserType.CUSTOMER;
} else {
return login();
}
}
return UserType.NONE;
}
public Bank getBank() {
return bank;
}
public void setBank(Bank bank) {
this.bank = bank;
}
}